package org.x.user.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.x.common.web.exception.BusinessException;
import org.x.user.mapper.SysConfigMapper;
import java.lang.Boolean;
import java.lang.Override;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.x.user.entity.SysConfig;
import org.x.user.dto.ConfigDTO;
import org.x.user.query.ConfigQuery;
import org.x.user.service.ConfigService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import static org.x.common.base.result.ResultCode.CONFIG_KEY_EXIST;
import static org.x.common.base.result.ResultCode.CONFIG_NOT_FOUND;

/**
 * 系统配置管理的实现
 *
 * @author 夏包包
 * @date 2025-03-08 13:39:03
 */
@Service
public class ConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ConfigService {

    @Autowired
    private SysConfigMapper configMapper;

    @Override
    public Boolean addConfig(ConfigDTO configDTO) {
        QueryWrapper<SysConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("config_key", configDTO.getConfigKey());
        SysConfig existingConfig = configMapper.selectOne(queryWrapper);
        if (existingConfig != null) {
            //已存在相同的配置键
            throw new BusinessException(CONFIG_KEY_EXIST);
        }
        SysConfig configDO = new SysConfig();
        configDO.setConfigKey(configDTO.getConfigKey());
        configDO.setConfigValue(configDTO.getConfigValue());
        int result = configMapper.insert(configDO);
        return result > 0;
    }

    @Override
    public Boolean deleteConfig(ConfigDTO configDTO) {
        SysConfig configDO = configMapper.selectById(configDTO.getConfigId());
        if (configDO == null) {
            //配置信息不存在
            throw new BusinessException(CONFIG_NOT_FOUND);
        }
        int result = configMapper.deleteById(configDTO.getConfigId());
        return result > 0;
    }

    @Override
    public Boolean updateConfig(ConfigDTO configDTO) {
        SysConfig configDO = configMapper.selectById(configDTO.getConfigId());
        if (configDO == null) {
            //配置信息不存在
            throw new BusinessException(CONFIG_NOT_FOUND);
        }
        configDO.setConfigKey(configDTO.getConfigKey());
        configDO.setConfigValue(configDTO.getConfigValue());
        int result = configMapper.updateById(configDO);
        return result > 0;
    }

    @Override
    public List<SysConfig> getConfig(ConfigQuery configQuery) {
        QueryWrapper<SysConfig> queryWrapper = new QueryWrapper<>();
        if (configQuery.getConfigId() != null) {
            queryWrapper.eq("id", configQuery.getConfigId());
        }
        if (configQuery.getConfigKey() != null) {
            queryWrapper.eq("config_key", configQuery.getConfigKey());
        }
        List<SysConfig> configList = configMapper.selectList(queryWrapper);
        return configList;
    }
}
